import http from '@/utils/http'

const api = ['test', 'development'].includes(import.meta.env.VITE_NODE_ENV)
	? ''
	: '/matdesignMj'

/**
 * 下载示例CSV文件
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<Blob>} 返回文件Blob
 */
export const downloadExampleFile = (filename = 'HV_regress.csv') => {
	// 构建文件路径
	const fileUrl = new URL(
		`../../views/Product/AI4Data/components/src/data/${filename}`,
		import.meta.url
	).href

	return fetch(fileUrl).then((response) => {
		if (!response.ok) {
			throw new Error('文件不存在')
		}
		return response.blob()
	})
}

/**
 * 获取示例文件内容（用于预览）
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const getExampleFileContent = (filename = 'HV_regress.csv') => {
	const fileUrl = new URL(
		`../../views/Product/AI4Data/components/src/data/${filename}`,
		import.meta.url
	).href

	return fetch(fileUrl).then((response) => {
		if (!response.ok) {
			throw new Error(`HTTP error! status: ${response.status}`)
		}
		return response.text()
	})
}

/**
 * 上传文件
 * @param {File} file 要上传的文件
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postUploadFile = (file) => {
	return http.request({
		url: `${api}/pythonApi/file/uploadFile`,
		method: 'post',
		data: file,
		isToken: false,
	})
}

/**
 * 文件列表
 * @param {File} file 要上传的文件
 * @returns {Promise<string>} 返回文件内容文本
 */
export const getFileList = () => {
	return http.request({
		url: `${api}/pythonApi/file/fileList`,
		method: 'get',
		isToken: false,
		duplicateRequestValidation: false, // 重复请求限制
	})
}

/**
 * 特征工程
 * @param {File} file 要上传的文件
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postFeatureEngineering = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/featureEngineering`,
		method: 'post',
		isToken: false,
		data,
	})
}

/**
 * 获取文件内容
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postFileContent = (data) => {
	return http.request({
		url: `${api}/pythonApi/file/getFileContent`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 贝叶斯优化 - 数据预处理
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postClassifierAlgorithmChoice = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/classifier/algorithmChoice`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 建模与评估 - 数据预处理
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postClassifierEvaluateClassifierReport = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/classifier/evaluateClassifierReport`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 建模与评估 - 绘图 - 数据预处理
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postClassifierEvaluateClassifier = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/classifier/evaluateClassifier`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 贝叶斯优化 - 机器学习
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postRegressorAlgorithmChoice = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/regressor/algorithmChoice`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 建模与评估 - 机器学习
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postRegressorEvaluateRegressor = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/regressor/evaluateRegressor`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 模型保存
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postModelSavePlk = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/modelSavePlk`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 模型应用
 * @param {string} filename 文件名，默认为 'example.csv'
 * @returns {Promise<string>} 返回文件内容文本
 */
export const postModelUse = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/modelUse`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制真实散点图
 */
export const getTrueTrainImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/getTrueTrainImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制测试散点图
 */
export const getTrueTestImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/getTrueTestImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制真实响应图
 */
export const plotTrainResponseImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/plotTrainResponseImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制测试响应图
 */
export const plotTestResponseImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/plotTestResponseImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制真实残差图
 */
export const plotResidualsTrainImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/plotResidualsTrainImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 绘制测试残差图
 */
export const plotResidualsTestImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/plotResidualsTestImg`,
		method: 'post',
		data,
		isToken: false,
	})
}

/**
 * 贝叶斯优化MSE图
 */
export const bayesSearchCvMseImg = (data) => {
	return http.request({
		url: `${api}/pythonApi/machineLearning/bayesSearchCvMseImg`,
		method: 'post',
		data,
		isToken: false,
	})
}
